package main

import (
    "sync"
)

var goodsNum int = 1000                           // 商品可被抢购的个数
var luckyUser = make(map[interface{}]interface{}) // 幸运用户
var mu sync.Mutex

/*
存储方式：
（1）直接存储Mysql，效率太低
（2）写入到程序
（3）写入No-SQl
（4）写入到文件
*/

func SecKill(userData interface{}) {
    if num > 0 { // 在并发的场合，这个num的值可能是脏数据，但是有这个判断的话，可以过滤掉当秒杀完商品之后用户再请求就不会再继续造成资源耗费了
        go func() {
            mu.Lock()
            if num > 0 {
                _, e := luckyUser[userData]
                if !e { // 如果该用户已经抢购成功，则不允许继续抢购了
                    luckyUser[userData] = userData
                    num--
                }
            }
            mu.Unlock()
        }()
    }
}